package com.orangelife.service.feeDetail;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.orangelife.exception.AppBizException;
import com.orangelife.service.feeDetail.modal.PropFeeDetailDto;
import com.orangelife.webservice.service.feedetail.entity.ChangeFeeTypeDto;

public interface IFeeDetailService {
	/**
	 * 根据房屋ID获取总的欠费信息
	 * 
	 * @author rh
	 * @date 2016年4月27日
	 * @param servletRequest
	 * @param commID
	 * @param apartmentID
	 * @return
	 * @throws Exception
	 */
	public Map<String, Object> getTotalFeeDetailByApartmentID(String apartmentID)
			throws AppBizException;

	/**
	 * 根据房屋ID,收费类型，和缴费时间，状态更新缴费账单类型
	 * 
	 * @author rh
	 * @date 2016年4月27日
	 * @param servletRequest
	 * @param commID
	 * @param object
	 * @return
	 * @throws Exception
	 */
	public int updateType(String apartmentID, String feeTypeID, String feeDate,
			String type, String planID) throws AppBizException;

	/**
	 * 根据计划id修改账单状态（用户生成撤销时把预缴账单更新为预缴状态）
	 * 
	 * @author rh
	 * @date 2016年4月27日
	 * @param servletRequest
	 * @param commID
	 * @param object
	 * @return
	 * @throws Exception
	 */
	public int updateTypeByPlanID(String apartmentID, String feeTypeID,
			String feeDate, String type, String planID) throws AppBizException;

	/**
	 * 根据批量插入缴费账单
	 * 
	 * @author rh
	 * @date 2016年4月27日
	 * @param servletRequest
	 * @param commID
	 * @param object
	 * @return
	 * @throws Exception
	 */

	public int bauthInsertFeeDetail(List<Map<String, Object>> list)
			throws AppBizException;

	/**
	 * 用途 根据一张表内的所有ID查询propFeeDetail（橙子生活）(返回Map<String, Object>)
	 * 
	 * @author
	 * @date 创建时间 2016-07-27 16:08:29
	 * @param feeDetailID
	 *            (非必填字段)
	 * 
	 * @param apartmentID
	 *            (非必填字段)
	 * 
	 * @param feeTypeID
	 *            (非必填字段)
	 * 
	 * @param timetype
	 *            (非必填字段)
	 * 
	 * @param status
	 *            (非必填字段)
	 * 
	 * @param planID
	 *            (非必填字段)
	 * 
	 * @param type
	 *            (非必填字段)
	 * @return
	 * @throws AppBizException
	 */

	public List<Map<String, Object>> selectPropFeeDetailByRelevantID(
			String feeDetailID, String apartmentID, String feeTypeID,
			String timetype, String status, String ruleID, String planID,
			String type) throws AppBizException;

	/**
	 * 用途 根据一张表内的所有ID查询propFeeDetail（橙子生活）(返回Map<String, Object>)
	 * 
	 * @author
	 * @date 创建时间 2016-07-27 16:08:29
	 * @param feeDetailID
	 *            (非必填字段)
	 * 
	 * @param apartmentID
	 *            (非必填字段)
	 * 
	 * @param feeTypeID
	 *            (非必填字段)
	 * 
	 * @param timetype
	 *            (非必填字段)
	 * 
	 * @param status
	 *            (非必填字段)
	 * 
	 * @param planID
	 *            (非必填字段)
	 * 
	 * @param type
	 *            (非必填字段)
	 * @return
	 * @throws AppBizException
	 */

	public List<Map<String, Object>> checkRuleIDIsUsed(String feeDetailID,
			String apartmentID, String feeTypeID, String timetype,
			String status, String ruleID, String planID, String type)
			throws AppBizException;

	public Map<String, Object> _check(String apartmentID,
			List<String> feeDetailIDs) throws AppBizException;

	/**
	 * 用途 根据一张表内的所有ID查询propFeeDetail（橙子生活）(返回对象)
	 * 
	 * @author
	 * @date 创建时间 2016-08-01 12:03:30
	 * @param feeDetailID
	 *            (非必填字段)
	 * 
	 * @param apartmentID
	 *            (非必填字段)
	 * 
	 * @param feeTypeID
	 *            (非必填字段)
	 * 
	 * @param timetype
	 *            (非必填字段)
	 * 
	 * @param status
	 *            (非必填字段)
	 * 
	 * @param planID
	 *            (非必填字段)
	 * 
	 * @param type
	 *            (非必填字段)
	 * @return
	 * @throws AppBizException
	 */

	public List<PropFeeDetailDto> findPropFeeDetailByRelevantID(
			String feeDetailID, String apartmentID, String feeTypeID,
			String timetype, String status, String planID, String type,
			String ruleID, String feeDate) throws AppBizException;

	/**
	 * 用途 添加propFeeDetail（橙子生活）
	 * 
	 * @author
	 * @date创建时间 2016-08-01 12:03:30
	 * @param propFeeDetail
	 * @return
	 * @throws AppBizException
	 */
	public int addPropFeeDetail(List<PropFeeDetailDto> propFeeDetails)
			throws AppBizException;

	public int editPropFeeDetail(List<PropFeeDetailDto> propFeeDetails)
			throws AppBizException;

	/**
	 * 用途 查询列表 （橙子生活）
	 * 
	 * @author
	 * @date 创建时间 2016-08-01 12:03:30
	 * @param search
	 *            搜索内容
	 * @param tsCreate
	 *            创建时间
	 * @param pageNo
	 *            页码
	 * @param pageSize
	 *            页面大小
	 * @return
	 * @throws AppBizExceptionception
	 */
	public List<Map<String, Object>> findPropFeeDetailByPage(String commID,
			String feeDate, String feeTypeID, String status, String tsCreate,
			String search, int pageNo, int pageSize) throws AppBizException;

	/**
	 * 批量更新细项状态
	 * 
	 * @author
	 * @date 创建时间 2016-08-01 12:03:30
	 * @param search
	 *            搜索内容
	 * @param tsCreate
	 *            创建时间
	 * @param pageNo
	 *            页码
	 * @param pageSize
	 *            页面大小
	 * @return
	 * @throws AppBizExceptionception
	 */
	public int setFeeDetailsPay(String apartmentID, List<String> feeDetailIDs,
			Date paytime) throws AppBizException;

	/**
	 * 批量更新细项状态
	 * 
	 * @author
	 * @date 创建时间 2016-08-01 12:03:30
	 * @param search
	 *            搜索内容
	 * @param tsCreate
	 *            创建时间
	 * @param pageNo
	 *            页码
	 * @param pageSize
	 *            页面大小
	 * @return
	 * @throws AppBizExceptionception
	 */
	public int setFeeDetailsNoPay(String apartmentID,
			List<String> feeDetailIDs, Date paytime) throws AppBizException;

	/**
	 * 用途 修改propFeeDetail（橙子生活）
	 * 
	 * @author
	 * @date创建时间 2016-08-16 18:23:28
	 * @param propFeeDetail
	 * @return
	 * @throws AppBizException
	 */

	public int editPropFeeDetail(PropFeeDetailDto propFeeDetail)
			throws AppBizException;

	/**
	 * 用途 单个查询 （橙子生活）
	 * 
	 * @author
	 * @date创建时间 2016-08-16 18:23:28
	 * @param propFeeDetailID
	 * @return
	 * @throws AppBizException
	 */

	public PropFeeDetailDto findPropFeeDetailByID(String propFeeDetailID)
			throws AppBizException;

	/**
	 * 用途 逻辑删除（橙子生活）
	 * 
	 * @author
	 * @date创建时间 2016-08-16 18:23:28
	 * @param propFeeDetailID
	 * @return
	 * @throws AppBizException
	 */
	public int deletePropFeeDetailByLogic(String propFeeDetailID)
			throws AppBizException;

	/***
	 * 批量删除导入历史
	 * 
	 * @param map
	 * @return
	 * @throws AppBizException
	 */

	public int bauthdeleteFeeDetail(Map<String, Object> map)
			throws AppBizException;

	/***
	 * 批量查询(未付款的)
	 * 
	 * @param feeDetailIDs
	 * @return
	 * @throws AppBizException
	 */
	public List<Map<String, Object>> bauthFindFeeDetail(
			List<String> feeDetailIDs) throws AppBizException;

	/***
	 * 批量查询(未付款的)日期
	 * 
	 * @param feeDetailIDs
	 * @return
	 * @throws AppBizException
	 */
	public List<Map<String, Object>> findFeeDetailByFeeDate(
			Map<String, Object> map) throws AppBizException;

	/***
	 * 批量删除(未付款的)日期
	 * 
	 * @param map
	 * @return
	 * @throws AppBizException
	 */
	public int deleteFeeDetail(Map<String, Object> map) throws AppBizException;

	/***
	 * 批量删除(未付款的)日期
	 * 
	 * @param map
	 * @return
	 * @throws AppBizException
	 */
	public int deleteFeeDetails(List<String> feeDetails) throws AppBizException;

	/***
	 * 获取预缴科目的最大缴费时间
	 * 
	 * @param feeDetailIDs
	 * @return
	 * @throws AppBizException
	 */
	public Map<String, Map<String, Object>> findFeeDetailMaxDate(
			String apartmentID, List<String> feeTypeIDs, String ispre)
			throws AppBizException;

	public List<Map<String, Object>> getPropFeeDetails(String apartmentID,
			String feeTypeID, String feeDate) throws AppBizException;

	/***
	 * 获取未缴信息 ，归属为正常物业费的
	 * 
	 * @param feeDetailIDs
	 * @return
	 * @throws AppBizException
	 */
	public List<Map<String, Object>> getFeeDetailsForOffset(String apartmentID,
			String commID) throws AppBizException;

	/***
	 * 
	 * @param map
	 * @return
	 * @throws AppBizException
	 */
	public List<Map<String, Object>> findFeeDetailInfo(Map<String, Object> map)
			throws AppBizException;

	/***
	 * 
	 * @param map
	 * @return
	 * @throws AppBizException
	 */
	public List<Map<String, Object>> findMoreFeeDetailInfo(
			Map<String, Object> map) throws AppBizException;

	/**
	 * 用途 批量查询propFeeDetail（橙子生活）(返回Map)
	 * 
	 * @author
	 * @date 创建时间 2016-12-20 22:29:07
	 * 
	 * @return
	 * @throws AppBizException
	 */

	public List<Map<String, Object>> bauthfindPropFeeDetailByMap(
			Map<String, Object> propFeeDetail) throws AppBizException;

	public List<Map<String, Object>> bauthSearchPropFeeDetails(
			Map<String, Object> propFeeDetail) throws AppBizException;

	public List<Map<String, Object>> getFeeDetails(
			Map<String, Object> propFeeDetail) throws AppBizException;

	public int changefeeDetailType(ChangeFeeTypeDto changeFeeTypeDto)
			throws AppBizException;

	public List<Map<String, Object>> monFeeList(Map<String, Object> param,
			int pageNo, int pageSize) throws AppBizException;

	public List<Map<String, Object>> monDetail(Map<String, Object> param)
			throws AppBizException;

	public List<Map<String, Object>> findropFeeDetailByMap(
			Map<String, Object> propFeeDetail) throws AppBizException;

}
